import { defineStore } from 'pinia'
import { login, getUserInfo } from '@/api/student/auth'

/**
 * 用户状态管理
 */
export const useUserStore = defineStore('user', {
    // 数据
    state: () => ({
    token: localStorage.getItem('token') || null,
    userInfo: null,
    isAuthenticated: !!localStorage.getItem('token')
    }),

  // 获取数据的方法
  getters: {
    /**
     * 是否为学生角色
     */
    isStudent() {
      return this.userInfo?.role === '学生'
    },
    
    /**
     * 获取班级信息
     */
    classInfo() {
      return this.userInfo?.classInfo || null
    },
    
    /**
     * 获取用户ID
     */
    userId() {
      return this.userInfo?.id || null
    }
  },

   // 业务逻辑方法
  actions: {
    /**
     * 用户登录
     * @param {String} account 账号
     * @param {String} password 密码
     * @returns {Promise<Boolean>}
     */
    async login(account, password) {
      try {
        const { data } = await login({ account, password })
        this.setToken(data.token)
        this.setUserInfo(data.userInfo)
        console.log(data.userInfo)
        return true
      } catch (error) {
        console.error('登录失败:', error)
        return false
      }
    },

    /**
     * 获取用户信息
     * @returns {Promise<Boolean>}
     */
    async fetchUserInfo() {
      if (!this.token) return false
      
      try {
        const { data } = await getUserInfo()
        this.setUserInfo(data.userInfo)
        return true
      } catch (error) {
        console.error('获取用户信息失败:', error)
        return false
      }
    },

    /**
     * 设置Token
     * @param {String} token
     */
    setToken(token) {
      this.token = token
      localStorage.setItem('token', token)
    },

    /**
     * 设置用户信息
     * @param {Object} info
     */
    setUserInfo(info) {
      this.userInfo = info
      this.isAuthenticated = true
    },

    /**
     * 退出登录
     */
    logout() {
      this.token = null
      this.userInfo = null
      this.isAuthenticated = false
      localStorage.removeItem('token')
    }
  },
  
  // 持久化存储
  persist: {
    key: 'user-store',
    storage: localStorage,
    paths: ['token', 'isAuthenticated']
  }
}) 